# -------------------------------------------------------------------
#       -*- coding: utf-8 -*-
#   @Project    :   spider
#   @File       :   45_3_协程.py
#   @Author     :   WANGYU
#   @Time       :   2021-09-04 09:05:54
#   @Software   :   PyCharm
#   @Desc       :   
# -------------------------------------------------------------------
import asyncio
import time


async def func1():
    print('hello i am func')
    # time.sleep(2)  # 当程序出现了同步操作的时候，异步就中断
    await asyncio.sleep(2)  # 异步操作的代码
    print('hello i am func')


async def func2():
    print('hello i am func1')
    # time.sleep(2)
    await asyncio.sleep(3)  # 异步操作的代码
    print('hello i am func1')


async def func3():
    print('hello i am func2')
    # time.sleep(2)
    await asyncio.sleep(4)  # 异步操作的代码
    print('hello i am func2')


async def main():
    # 第一种写法（不推荐，时间长，效率低）
    # f1 = func1()
    # await f1  # 一般await挂起操作放在协程对象前面
    # f2 = func2()
    # await f2
    # f3 = func3()
    # await f3

    # # 第二张写法（推荐，时间段，效率高，可完美用于爬虫程序）
    tasks = [  # python3.8 开始要创建task对象
        asyncio.create_task(func1()),
        asyncio.create_task(func2()),
        asyncio.create_task(func3())
    ]
    await asyncio.wait(tasks)


if __name__ == '__main__':
    t1 = time.time()
    asyncio.run(main())
    t2 = time.time()
    # 计算执行时间
    print(t2 - t1)
